home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / mssql_version.nasl < prev    next >
Text File  |  2005-03-31  |  11KB  |  297 lines

  1. #
  2. # modified by Michael Scheidell SECNAP Network security
  3. # to poll the smb registry (udp ping returned wrong info)
  4. #
  5. # modified by Tenable Network Security to get file version
  6. # to reduce false possitive (registry key is not allways correct)
  7. #
  8. # Supercedes MS02-034 MS02-020 MS02-007 MS01-060 MS01-032 MS00-092 MS00-048
  9. #            MS00-041 MS00-014 MS01-041
  10. #
  11. #
  12. # CAN-2002-0056, CAN-2002-0154, CAN-2002-0624, 
  13. # CAN-2002-0641, CAN-2002-0642  CVE-2001-0879
  14. # CVE-2000-0603  CAN-2000-1082  CAN-2000-1083
  15. # CAN-2000-1084  CAN-2000-1085  CAN-2001-0509
  16. # CAN-2000-1086
  17.            
  18. if(description)
  19. {
  20.  script_id(11217);
  21.  script_bugtraq_id(1292, 2030, 2042, 2043, 2863, 3733, 4135, 4847, 5014, 5205);
  22.  script_version ("$Revision: 1.18 $");
  23.  name["english"] = "Microsoft's SQL Version Query";
  24.  script_name(english:name["english"]);
  25.  
  26.  script_cve_id("CAN-2000-1081", "CVE-2000-0202", "CVE-2000-0485",
  27.             "CAN-2000-1087", "CAN-2000-1088", "CAN-2002-0982",
  28.             "CAN-2001-0542", "CVE-2001-0344" );
  29.            
  30.  if(defined_func("script_xref"))script_xref(name:"IAVA", value:"2002-B-0004");
  31.   
  32.  desc["english"] = "
  33. The plugin attempts a smb connection to read version from
  34. the registry key 
  35. SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion
  36. to determine the Version of SQL and Service Pack the host
  37. is running.
  38.  
  39. Some versions may allow remote access, denial of service
  40. attacks, and the ability of a hacker to run code of their
  41. choice.
  42.  
  43. Risk factor : High
  44. Solution : Apply current service packs and hotfixes";
  45.  
  46.  
  47.  script_description(english:desc["english"]);
  48.  
  49.  summary["english"] = "Microsoft's SQL Version Query";
  50.  script_summary(english:summary["english"]);
  51.  
  52.  script_category(ACT_GATHER_INFO);
  53.  script_copyright(english:"This script is Copyright (C) 2003 John Lampe");
  54.  family["english"] = "Windows";
  55.  script_family(english:family["english"]);
  56.  script_dependencies("netbios_name_get.nasl",
  57.                      "smb_login.nasl", "smb_registry_full_access.nasl",
  58.              "mssqlserver_detect.nasl");
  59.  script_require_keys("SMB/transport", "SMB/name", "SMB/login",
  60.                      "SMB/password", "SMB/registry_full_access");
  61.  script_require_ports(139, 445, 1433, "Services/mssql");
  62.  
  63.  exit(0);
  64. }
  65.  
  66.  
  67. mssql_port = get_kb_item("Services/mssql");
  68. if(!mssql_port)mssql_port = 1433;
  69.  
  70. # versions culled from http://www.sqlsecurity.com
  71.  
  72. version[0] = "8.00.760";  desc[0] = "2000 SP3   ";
  73. version[1] = "8.00.679";  desc[1] = "2000 SP2+Q316333   ";
  74. version[2] = "8.00.667";  desc[2] = "2000 SP2+8/14 fix  ";
  75. version[3] = "8.00.665";  desc[3] = "2000 SP2+8/8 fix  ";
  76. version[4] = "8.00.655";  desc[4] = "2000 SP2+7/24 fix  ";
  77. version[5] = "8.00.650";  desc[5] = "2000 SP2+Q322853   ";
  78. version[6] = "8.00.608";  desc[6] = "2000 SP2+Q319507   ";
  79. version[7] = "8.00.604";  desc[7] = "2000 SP2+3/29 fix  ";
  80. version[8] = "8.00.578";  desc[8] = "2000 SP2+Q317979   ";
  81. version[9] = "8.00.561";  desc[9] = "2000 SP2+1/29 fix  ";
  82. version[10] = "8.00.534";  desc[10] = "2000 SP2.01   ";
  83. version[11] = "8.00.532";  desc[11] = "2000 SP2   ";
  84. version[12] = "8.00.475";  desc[12] = "2000 SP1+1/29 fix  ";
  85. version[13] = "8.00.452";  desc[13] = "2000 SP1+Q308547   ";
  86. version[14] = "8.00.444";  desc[14] = "2000 SP1+Q307540/307655   ";
  87. version[15] = "8.00.443";  desc[15] = "2000 SP1+Q307538   ";
  88. version[16] = "8.00.428";  desc[16] = "2000 SP1+Q304850   ";
  89. version[17] = "8.00.384";  desc[17] = "2000 SP1   ";
  90. version[18] = "8.00.287";  desc[18] = "2000 No SP+Q297209  ";
  91. version[19] = "8.00.250";  desc[19] = "2000 No SP+Q291683  ";
  92. version[20] = "8.00.249";  desc[20] = "2000 No SP+Q288122  ";
  93. version[21] = "8.00.239";  desc[21] = "2000 No SP+Q285290  ";
  94. version[22] = "8.00.233";  desc[22] = "2000 No SP+Q282416  ";
  95. version[23] = "8.00.231";  desc[23] = "2000 No SP+Q282279  ";
  96. version[24] = "8.00.226";  desc[24] = "2000 No SP+Q278239  ";
  97. version[25] = "8.00.225";  desc[25] = "2000 No SP+Q281663  ";
  98. version[26] = "8.00.223";  desc[26] = "2000 No SP+Q280380  ";
  99. version[27] = "8.00.222";  desc[27] = "2000 No SP+Q281769  ";
  100. version[28] = "8.00.218";  desc[28] = "2000 No SP+Q279183  ";
  101. version[29] = "8.00.217";  desc[29] = "2000 No SP+Q279293/279296  ";
  102. version[30] = "8.00.211";  desc[30] = "2000 No SP+Q276329  ";
  103. version[31] = "8.00.210";  desc[31] = "2000 No SP+Q275900  ";
  104. version[32] = "8.00.205";  desc[32] = "2000 No SP+Q274330  ";
  105. version[33] = "8.00.204";  desc[33] = "2000 No SP+Q274329  ";
  106. version[34] = "8.00.194";  desc[34] = "2000 No SP  ";
  107. version[35] = "8.00.190";  desc[35] = "2000 Gold, no SP ";
  108. version[36] = "8.00.100";  desc[36] = "2000 Beta 2  ";
  109. version[37] = "8.00.078";  desc[37] = "2000 EAP5   ";
  110. version[38] = "8.00.047";  desc[38] = "2000 EAP4   ";
  111. version[39] = "7.00.1077";  desc[39] = "7.0 SP4+Q316333   ";
  112. version[40] = "7.00.1063";  desc[40] = "7.0 SP4   ";
  113. version[41] = "7.00.1004";  desc[41] = "7.0 SP3+Q304851   ";
  114. version[42] = "7.00.996";  desc[42] = "7.0 SP3 + hotfix ";
  115. version[43] = "7.00.978";  desc[43] = "7.0 SP3+Q285870   ";
  116. version[44] = "7.00.977";  desc[44] = "7.0 SP3+Q284351   ";
  117. version[45] = "7.00.970";  desc[45] = "7.0 SP3+Q283837/282243   ";
  118. version[46] = "7.00.961";  desc[46] = "7.0 SP3   ";
  119. version[47] = "7.00.921";  desc[47] = "7.0 SP2+Q283837   ";
  120. version[48] = "7.00.919";  desc[48] = "7.0 SP2+Q282243   ";
  121. version[49] = "7.00.918";  desc[49] = "7.0 SP2+Q280380   ";
  122. version[50] = "7.00.917";  desc[50] = "7.0 SP2+Q279180   ";
  123. version[51] = "7.00.910";  desc[51] = "7.0 SP2+Q275901   ";
  124. version[52] = "7.00.905";  desc[52] = "7.0 SP2+Q274266   ";
  125. version[53] = "7.00.889";  desc[53] = "7.0 SP2+Q243741   ";
  126. version[54] = "7.00.879";  desc[54] = "7.0 SP2+Q281185   ";
  127. version[55] = "7.00.857";  desc[55] = "7.0 SP2+Q260346   ";
  128. version[56] = "7.00.842";  desc[56] = "7.0 SP2   ";
  129. version[57] = "7.00.835";  desc[57] = "7.0 SP2 Beta  ";
  130. version[58] = "7.00.776";  desc[58] = "7.0 SP1+Q258087   ";
  131. version[59] = "7.00.770";  desc[59] = "7.0 SP1+Q252905   ";
  132. version[60] = "7.00.745";  desc[60] = "7.0 SP1+Q253738   ";
  133. version[61] = "7.00.722";  desc[61] = "7.0 SP1+Q239458   ";
  134. version[62] = "7.00.699";  desc[62] = "7.0 SP1   ";
  135. version[63] = "7.00.689";  desc[63] = "7.0 SP1 Beta  ";
  136. version[64] = "7.00.677";  desc[64] = "7.0 MSDE O2K Dev ";
  137. version[65] = "7.00.662";  desc[65] = "7.0 Gold+Q232707   ";
  138. version[66] = "7.00.658";  desc[66] = "7.0 Gold+Q244763   ";
  139. version[67] = "7.00.657";  desc[67] = "7.0 Gold+Q229875   ";
  140. version[68] = "7.00.643";  desc[68] = "7.0 Gold+Q220156   ";
  141. version[69] = "7.00.623";  desc[69] = "7.0 Gold, no SP ";
  142. version[70] = "7.00.583";  desc[70] = "7.0 RC1   ";
  143. version[71] = "7.00.517";  desc[71] = "7.0 Beta 3  ";
  144. version[72] = "7.00.416";  desc[72] = "7.0 SP5a   ";
  145. version[73] = "7.00.415";  desc[73] = "7.0 SP5 ** BAD **";
  146. version[74] = "7.00.339";  desc[74] = "7.0 SP4 + y2k ";
  147. version[75] = "7.00.297";  desc[75] = "7.0 SP4 + SBS ";
  148. version[76] = "7.00.281";  desc[76] = "7.0 SP4   ";
  149. version[77] = "7.00.259";  desc[77] = "7.0 SP3 + SBS ";
  150. version[78] = "7.00.258";  desc[78] = "7.0 SP3   ";
  151. version[79] = "7.00.252";  desc[79] = "7.0 SP3 ** BAD **";
  152. version[80] = "7.00.240";  desc[80] = "7.0 SP2   ";
  153. version[81] = "7.00.213";  desc[81] = "7.0 SP1   ";
  154. version[82] = "7.00.201";  desc[82] = "7.0 No SP  ";
  155. version[83] = "7.00.198";  desc[83] = "7.0 Beta 1  ";
  156. version[84] = "7.00.151";  desc[84] = "7.0 SP3   ";
  157. version[85] = "7.00.139";  desc[85] = "7.0 SP2   ";
  158. version[86] = "7.00.124";  desc[86] = "7.0 SP1   ";
  159. version[87] = "7.00.121";  desc[87] = "7.0 No SP  ";
  160. version[88] = "6.50.479";  desc[88] = "6.5 Post SP5a  ";
  161. version[89] = "6.50.464";  desc[89] = "6.5 SP5a+Q275483   ";
  162. version[90] = "6.50.416";  desc[90] = "6.5 SP5a   ";
  163. version[91] = "6.50.415";  desc[91] = "6.5 Bad SP5  ";
  164. version[92] = "6.50.339";  desc[92] = "6.5 Y2K Hotfix  ";
  165. version[93] = "6.50.297";  desc[93] = "6.5 Site Server 3 ";
  166. version[94] = "6.50.281";  desc[94] = "6.5 SP4   ";
  167. version[95] = "6.50.259";  desc[95] = "6.5 SBS only  ";
  168. version[96] = "6.50.258";  desc[96] = "6.5 SP3   ";
  169. version[97] = "6.50.252";  desc[97] = "6.5 Bad SP3  ";
  170. version[98] = "6.50.240";  desc[98] = "6.5 SP2   ";
  171. version[99] = "6.50.213";  desc[99] = "6.5 SP1   ";
  172. version[100] = "6.50.201";  desc[100] = "6.5 Gold   ";
  173. version[101] = "6.00.151";  desc[101] = "6.0 SP3   ";
  174. version[102] = "6.00.139";  desc[102] = "6.0 SP2   ";
  175. version[103] = "6.00.124";  desc[103] = "6.0 SP1   ";
  176. version[104] = "6.00.121";  desc[104] = "6.0 No SP  ";
  177.  
  178. #
  179. # The script code starts here
  180. #
  181.  
  182. include("smb_nt.inc");
  183.  
  184. function GetRealFileVersion(socket, uid, tid, fid)
  185. {
  186.  local_var i, fsize, data, off, tmp, version, v, len, tab;
  187.  
  188.  fsize = smb_get_file_size(socket:socket, uid:uid, tid:tid, fid:fid);
  189.  if  ( fsize < 180224 ) 
  190.     off = 0;
  191.  else 
  192.     off = fsize - 180224;
  193.  
  194.  
  195.  for ( i = 0 ; off < fsize ; i ++ )
  196.  {
  197.    tmp = ReadAndX(socket:soc, uid:uid, tid:tid, fid:fid, count:16384, off:off);
  198.    if (!tmp) return NULL;
  199.    info = strstr (tmp, 'V\x00S\x00_\x00V\x00E\x00R\x00S\x00I\x00O\x00N\x00_\x00I\x00N\x00F\x00O\x00');
  200.    if ( strlen (info) >= 0x35 )
  201.    {
  202.      tab[0] = ord(info[0x1E+22]) + ord(info[0x1E+23])*256;
  203.      tab[1] = ord(info[0x1E+20]) + ord(info[0x1E+21])*256;
  204.      tab[2] = ord(info[0x1E+18]) + ord(info[0x1E+19])*256;
  205.      tab[3] = ord(info[0x1E+16]) + ord(info[0x1E+17])*256;
  206.      if (tab[1] == 0)
  207.        return string (tab[0], ".00.", tab[2]);
  208.      else
  209.        return string (tab[0], ".", tab[1], ".", tab[2]);
  210.    }
  211.    off += 16384;
  212.  }
  213.  
  214.  return NULL;
  215. }
  216.  
  217. port    =  kb_smb_transport();
  218. if(!port) port = 139;
  219.  
  220.  
  221. rootfile = registry_get_sz(key:"SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent\SubSystems", item:"CmdExec");
  222.  
  223. if(rootfile)
  224. {
  225.  share = ereg_replace(pattern:"([A-Z]):.*", replace:"\1$", string:rootfile);
  226.  exe =  ereg_replace(pattern:"[A-Z]:(.*\.(DLL|dll)).*", replace:"\1", string:rootfile);
  227.  
  228.  name     =  kb_smb_name();
  229.  login    =  kb_smb_login();
  230.  pass      =  kb_smb_password();
  231.  domain     =  kb_smb_domain();
  232.  
  233.  if(!get_port_state(port))exit(0);
  234.  
  235.  soc = open_sock_tcp(port);
  236.  if(!soc) break;
  237.  
  238.  
  239.  if ( port == 139 )
  240.  {
  241.   r = smb_session_request(soc:soc, remote:name);
  242.   if(!r) break;
  243.  }
  244.  
  245.  prot = smb_neg_prot(soc:soc);
  246.  if(!prot) break;
  247.  
  248.  r = smb_session_setup(soc:soc, login:login, password:pass, domain:domain, prot:prot);
  249.  if(!r) break;
  250.  
  251.  uid = session_extract_uid(reply:r);
  252.  
  253.  r = smb_tconx(soc:soc, name:name, uid:uid, share:share);
  254.  tid = tconx_extract_tid(reply:r);
  255.  if(!tid) break;
  256.  
  257.  fid = OpenAndX(socket:soc, uid:uid, tid:tid, file:exe);
  258.  if(fid)
  259.  {
  260.   value = GetRealFileVersion(socket:soc, uid:uid, tid:tid, fid:fid);
  261.   set_kb_item(name:"mssql/SQLVersion",value:value);
  262.  }
  263. }
  264.  
  265.   
  266. key = "SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion";
  267. item = "CSDVersion";
  268.  
  269. if (!value)
  270. {
  271.  value = registry_get_sz(key:key, item:item);
  272.  if(!value)value = registry_get_sz(key:key, item:"CurrentVersion");
  273.  if(!value)exit(0);
  274.  set_kb_item(name:"mssql/SQLVersion",value:value);
  275. }
  276.  
  277. for (i=0; version[i] ; i = i + 1) 
  278. {
  279.  if ( version[i] >< value )
  280.  {
  281.   myret = string("The server is running MS SQL ", desc[i], value,"\n");
  282.   if( (i == 0) || (i == 39) )
  283.   {
  284.    security_note(port:mssql_port, data:myret);
  285.    exit(0);
  286.   }
  287.   if (i < 39)
  288.     myret = string(myret,"but needs ", desc[0],"due to security flaws\n");
  289.   else
  290.     myret = string(myret,"but needs ", desc[39],"due to security flaws\n");
  291.  
  292.   security_hole(port:mssql_port, data:myret);
  293.   exit(0);
  294.  }
  295. }
  296.  
  297.